package com.xh3140.android.widget.chart.scales;

import android.graphics.Paint;

import androidx.annotation.NonNull;

import com.xh3140.android.widget.utils.PaintUtils;

/**
 * 刻度列表，用于控制坐标系的坐标轴刻度
 */
public abstract class AxisScales {
    // 开始值
    public final float start;

    // 间隔大小
    public final float interval;

    // 有效数量
    public final int count;

    // 初始索引
    public final int index;

    // 小数点后保留位数
    public final int scale;

    // 初始索引对应的值（频繁使用，优化）
    //public final float initial;

    // 末尾值（频繁使用，优化）
    //public final float end;

    public AxisScales(float start, float interval, int count, int index, int scale) {
        this.start = start;
        this.interval = interval;
        this.count = count;
        this.index = index;
        this.scale = scale;
        //this.initial = getValue(index);
        //this.end = getValue(count - 1);
    }

    public float getInitial() {
        return getValue(index);
    }

    public float getEnd() {
        return getValue(count - 1);
    }

    /**
     * 获取值
     *
     * @param index 索引值
     * @return 对应索引的值
     */
    public abstract float getValue(int index);

    /**
     * 获取文本
     *
     * @param index 索引值
     * @return 对应索引的文本
     */
    public abstract String getText(int index);

    /**
     * 获取最大宽度
     *
     * @param paint 画笔
     * @param index 开始索引值
     * @param count 数量
     */
    public int getMaximumWidth(@NonNull Paint paint, int index, int count) {
        int result = 0;
        int a = Math.max(0, index);
        int b = Math.min(index + count, this.count - 1);
        for (int i = a; i < b; ++i) {
            result = Math.max(result, PaintUtils.getTextBoundsWidth(paint, getText(i)));
        }
        return result;
    }
}
